package cn.yotta.user.core.server.dao;

import cn.yotta.common.api.model.Paging;
import cn.yotta.user.api.params.user.UserPageRequest;
import cn.yotta.user.core.server.dto.user.UserDto;
import cn.yotta.user.core.server.entity.User;
import cn.yotta.user.core.server.manager.user.UserManager;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Collection;
import java.util.List;

/**
 * @author w_etw
 * @date 2023/4/15 21:24
 */
public interface UserDao extends IService<User> {

    /**
     * 根据用户id查询用户
     * @param tenantId 租户id
     * @param ids 用户id集合
     * @return 用户结果
     */
    List<User> findUserByIds(Long tenantId, Collection<Long> ids);

    /**
     * 根据用户id查询用户
     * @param tenantId 租户id
     * @param id 用户id
     * @return 用户结果
     */
    User findUserById(Long tenantId, Long id);

    /**
     * 根据username查询用户
     * @param tenantId 租户id
     * @param username 用户名
     * @return 用户结果
     */
    User findByUsername(Long tenantId, String username);

    /**
     * 用户信息基础分页查询
     * @param user 用户模型
     * @return 返回用户基础信息
     */
    Page<User> page(Integer pageNo,Integer pageSize,User user);

    /**
     * 冻结用户
     * @param tenantId 租户id
     * @param id 用户id
     * @param operatorId 操作人id
     * @return  当前操作是否成功； true表示成功，false表示失败，或者没有查到当前用户
     */
    Boolean freezeUser(Long tenantId, Long id, Long operatorId);

    /**
     * 解冻用户
     * @param tenantId 租户id
     * @param id 用户id
     * @param operatorId 操作人id
     * @return 当前操作是否成功； true表示成功，false表示失败，或者没有查到当前用户
     */
    Boolean unFreeze(Long tenantId, Long id, Long operatorId);

    /**
     * 启用用户
     * @param tenantId 租户id
     * @param id 用户id
     * @param operatorId 操作人id
     * @return 当前操作是否成功； true表示成功，false表示失败，或者没有查到当前用户
     */
    Boolean enable(Long tenantId, Long id, Long operatorId);

    /**
     * 禁用用户
     * @param tenantId 租户id
     * @param id 用户id
     * @param operatorId 操作人id
     * @return 当前操作是否成功； true表示成功，false表示失败，或者没有查到当前用户
     */
    Boolean disable(Long tenantId, Long id, Long operatorId);

    /**
     * 根据手机好码查询用户
     * @param tenantId 租户ID
     * @param mobile 手机号
     * @return 用户信息
     */
    User findUserByMobile(Long tenantId, String mobile);
}
